home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / amok_lha / amok77.lha / Funktionen / Funktionen.dok (.png) next >
ANSI Art File  |  1993-08-15  |  5KB  |  640x1824  |  4-bit (7 colors)
Labels: text | screenshot | font
OCR: Program. Funktionen . mod Contents. floating-point arithmetic compiler Author. Richard G"nther [gum] Address. HeilbronnerStr .267, 7410 Reutlingen Phone . 07121/66432 Copyright . Public Domain Language Translator . Oberon Imports, AmigaOberon v2.14d ExecLists [gum ] :History. V1.0 [gum] 15-May-92 first implementation History. V1.1 [gum] 06-July-92 cosmetic changes Bugs . does not support Commodores MathIEEESing-Libs because of Bugs. AmigaOberon not supporting them (number format problems) ******************************************************** ) Dieses Modul "bersetzt Terme mit Realzahlen in ausf"hrbaren Code, wie es z. B. Funktionsplotter (s. Beispiel) verlangen. COPYRIGHT: Dieses Paket darf nur in vollem Umfang und nur zum Selbstkostenbetra (max. 5 .- DM) weitergegeben werden. Jegliche kommerzielle Nutzung ohne schriftliche Genemigung von mir ist untersagt und wird zivil- rechtlich verfolgt! Wenn Sie Verbesserungen am Modul vornehmen bitte ich Sie darum, mich davon in Kenntnis zu setzen, damit auch andere davon profitieren k+men. PROZEDUR-DOKUMENTATION : Das Modul beinhaltet nur zwei Prozeduren, eine, um einen Term zu compilieren und eine, um den von ihr belegten Speicher wieder freizugeben. Die Compile-Prozedur erwartet einen Term nach folgendem Schema (EBNF): Ausdruck = Summe . Summe = Produkt {("+"I"-") Produkt}. Produkt = Potenz {("x"I"/") Potenz). Potenz Faktor = Faktor {"^" Faktor}. ["+"1"-"](("(" Summe ")") I (Funktion "(" Summe ")") ! Variable | Zahl | "pi" I "e"). Funktion = "SIN" I "COS" I "TAN" I. Zahl = Ziffern["." Ziffern]["E"["+"\"-"] Ziffern]. Ziffern Variable = Ziffer {Ziffer}. = CHAR. Die unterst"tzten Funktionen sind: ABS, SQRT, EXP, LN, LOG, ACOS, ASIN, ATAN, COS, COSH, SIN, SINH, TAN und TANH PROCEDURE Compile( source ARRAY OF CHAR; Vars ARRAY OF CHAR; precision INTEGER; VAR proc ARRAY OF BYTE; VAR errpos INTEGER ): BOOLEAN ; INPUT : source Der Term nach obiger Definition, der compiliert werden INPUT : Vars String, der die verwendeten Variablen enthelt, z.B. "x" soll. oder "xyz". Reihenfolge beachten (s.u. ) INPUT : Variablen und Bezeichner sind caseinsensitive! precision Hier sollten Sie Funktionen. ffp oder Funktionen. dou ble f"r die Genauigkeit (und Geschwindigkeit!) angeben. OUTPUT : proc Sie sollten hier eine Prozedurvariable "bergeben, z. B. der Standardtypen Funktionen. FuncX oder Funktionen. FuncX Ihr wird eine Assemblerprozedur zugewiesen, mit der Sie die Werte berechnen k+nnen. Die Reihenfolge der Parameter sollte die gleiche sein, wie bei Vars an- gegeben (Oberon-/Modula2-Parameterreihenfolge!). Bei OUTPUT : errpos Fehlern wird NIL zugewiesen. Zeichenposition, an der ein Fehler auftrat oder -2, be internen Fehlern (Speicher, Libraries). Wenn kein Fehler auftrat hat errpos den Wert -1 (s.a. RESULT). RESULT: TRUE, wenn alles ok war, sonst FALSE (genaueres s. errpos). Der Aufruf lautet also z.B .: ... * ) VAR function : Funktionen. FuncX ; term errpos : INTEGER ; : ARRAY 64 OF CHAR ; x,y : REAL ; term := "xxsin(x)" ; (* . * ) IF Funktionen. Compile(term, "x", Funktionen. ffp, function, errpos) THEN y : = function(x) ; (x entspricht (hier): y := xxM.SIN(x) ; * ) END ; Funktionen. Dispose (function) ; (* ... * ) Die zweite Prozedur ist Dispose, sie gibt den ben-tigten Speicher einer Funktion wieder frei. Die Funktion darf danach also nicht mehr verwendet werden! Au erdem werden am Ende des Programms alle, noch nicht freige- gebenen Funktionen freigegeben. PROCEDURE Dispose (VAR proc: ARRAY OF BYTE) ; INPUT: proc Hier mu die Prozedurvariable, die Sie Compile "bergeben haben angegeben werden. ACHTUNG !!! Die Typen der proc-Parameter sind ARRAY OF BYTE (damit Sie alle Prozedurtypen angeben kennen), dadurch k+men leicht Fehler entstehen (Der Compiler meldet keine falschen Typen mehr !). BEISPIELPROGRAMM : Das Beispielprogramm FunktionenTest ist ein kleiner Funktionsplotter mit Postscriptausgang (weiteres s. FunktionenPost.dok). Viel Spa-